package businessdelegate;

import java.util.List;
import java.util.Properties;

import javax.ejb.Local;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import entities.CantidadMateriaPrima;
import entities.PedidoFabricacion;
import entities.PedidoProveedores;
import entitiesdto.ArticuloDTO;
import entitiesdto.CantidadArticuloDTO;
import entitiesdto.CantidadMateriaPrimaDTO;
import entitiesdto.EnvioCentroDistribucionDTO;
import entitiesdto.MateriaPrimaDTO;
import entitiesdto.PedidoFabricacionDTO;
import entitiesdto.PedidoProveedoresDTO;
import entitiesdto.SolicitudFabricacionDTO;
import entitiesdto.StockMateriaPrimaDTO;
import facade.SessionFacade;

@Local
public class FacadeBusinessDelegate implements SessionFacade {

	private SessionFacade sessionFacade;
	private InitialContext ic;
	private static FacadeBusinessDelegate INSTANCE;

	public FacadeBusinessDelegate() throws NamingException {
		Properties props = new Properties();
		props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");
		props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
		ic = new InitialContext(props);
		System.out.println(sessionFacade);
		sessionFacade = (SessionFacade) ic
				.lookup("fabrica-zara-EAR/SessionFacadeBean/remote");
		System.out.println(sessionFacade);
	}

	public static FacadeBusinessDelegate getInstance() throws NamingException {
		if (INSTANCE == null) {
			INSTANCE = new FacadeBusinessDelegate();
		}
		return INSTANCE;
	}

	public String getTexto(int numero) {
		return sessionFacade.getTexto(numero);
	}
	
	public boolean ingresarNuevoArticulo(ArticuloDTO art) {
		return sessionFacade.ingresarNuevoArticulo(art);
	}

	public List<EnvioCentroDistribucionDTO>  generarReposicionArticulos() {
		return sessionFacade.generarReposicionArticulos();
	}

	public List<MateriaPrimaDTO> getMateriasPrimas() {
		return sessionFacade.getMateriasPrimas();
	}

	public List<StockMateriaPrimaDTO> recibirProvedores(List<StockMateriaPrimaDTO> actualizacionStock) {
		return sessionFacade.recibirProvedores(actualizacionStock);
	}

	public boolean recibirSolicitudFabricacion(SolicitudFabricacionDTO sol) {
		return sessionFacade.crearSolicitudFabricacion(sol);
	}

	public boolean actualizarStock(CantidadMateriaPrima cmp, boolean agregar) {
		return sessionFacade.actualizarStock(cmp, agregar);
	}

	public PedidoProveedoresDTO comenzarFabricacion() {
		return sessionFacade.comenzarFabricacion();
	}

	public boolean crearPedidoFabricacion(SolicitudFabricacionDTO solFabr) {
		return sessionFacade.crearPedidoFabricacion(solFabr);
	}

	public boolean crearSolicitudFabricacion(SolicitudFabricacionDTO solFabr) {
		return sessionFacade.crearSolicitudFabricacion(solFabr);
	}

	public boolean generarPedidoProveedores(CantidadMateriaPrima cmp) {
		return sessionFacade.generarPedidoProveedores(cmp);
	}

	public MateriaPrimaDTO getMateriaPrimaByRef(String ref) {
		return sessionFacade.getMateriaPrimaByRef(ref);
	}

	public List<CantidadArticuloDTO> getArticulosSolicitados() {
		return sessionFacade.getArticulosSolicitados();
	}

	public boolean verificarMateriasPrimas(PedidoFabricacion pf) {
		return sessionFacade.verificarMateriasPrimas(pf);
	}

	public List<PedidoFabricacionDTO> getPedidosFabricacion() {
		return sessionFacade.getPedidosFabricacion();
	}

	public List<PedidoProveedoresDTO> getPedidosProveedores() {
		return sessionFacade.getPedidosProveedores();
	}
}
